The determination of resource usage is critical for many aspects of processing, including code refinement, billing, etc. One resource for which utilization is determined is processor time. In the z/Architecture, offered by International Business Machines Corporation, a timer is provided that measures elapsed central processing unit (CPU) time and causes an interruption when a specified amount of time has elapsed.
This timer is set by a Set CPU Timer (SPT) control instruction, and the contents of the timer are inspected via a Store CPU Time (STPT) control instruction. Both of these instructions are privileged instructions to ensure the accuracy of the time, and as such are not usable by problem-state programs (i.e., user programs).
In addition to the above, the z/OS® operating system, offered by International Business Machines Corporation, also provides a service routine referred to as TIMEUSED, which is available to problem-state programs. A program or operation calls the service to determine the amount of CPU time a piece of code (e.g., task) has used. The TIMEUSED service routine computes the elapsed time, adds the accumulated time, and returns the value to the program. The calculations of the TIMEUSED routine must be performed while being disabled for interruptions, since any interruption could adversely effect the results by manipulating the CPU timer or the accumulator.
The TIMEUSED service routine is linked via program call and program return instructions. This routine disables for interruptions, obtains and releases a CPU lock, establishes a recovery environment, calculates the elapsed time, and re-enables after having completed its work, all of which takes hundreds of CPU cycles. When attempting to measure a small fragment of code, the overhead of the TIMEUSED service routine can severely perturb what is being measured.